// src/utils/api.js
import axios from 'axios';
import { store } from '../../store';
import router from '../../router';
import { loginOut } from '../../store/modules/authStore';

declare module 'axios' {
  interface AxiosResponse<T = any> {
    code: number;
    data: T;
    message?: string;
  }
}

const http = axios.create({
  timeout: 10000,
});

// 请求拦截器
http.interceptors.request.use(
    config => {
        // 添加JWT令牌到请求头

        const state = store.getState();
        const token = state.auth.token;
        
        try{
            if (token) {
                config.headers.Authorization = `${token}`;
            }
        } catch (error) {
            console.log(error,123);
            return Promise.reject(error);
        }
        
        return config;
    }, 
    error => {
        return Promise.reject(error);
    }
);

// 响应拦截器
http.interceptors.response.use(
    response => {
        const resData = response.data;
        
        // 成功响应处理
        
        const { code, message } = resData;
        
        // 成功情况（根据后端的ResponseCode.SUCCESS判断）
        if (code === 0 || (code>=200 && code < 300) ) {
            // return Promise.resolve({
            //     code,
            //     data,
            //     message,
            //     success: true
            // });
            return resData
        }
        
        // 自定义业务错误处理
        return Promise.reject({
            code,
            message,
            isBusinessError: true
        });
    },
    error => {
        // HTTP状态码错误处理
        if (!error.response) {
            // 网络错误
            return Promise.reject({
                code: -1,
                message: '网络错误，请检查连接',
                isNetworkError: true
            });
        }
        
        const response = error.response.data;
        
        // 处理令牌过期
        if (error.response.status === 401 && response.code === 2002) {
        //   // 尝试刷新令牌
        //   return refreshTokenAndRetry(error.config);
        }
        
        // 处理特定错误码
        if(response.code >= 2001 && response.code < 3000){
            router.navigate('/login')
            store.dispatch(loginOut())
        }
        
        // 返回统一的错误对象
        return Promise.reject({
            code: response.code || error.response.status,
            message: response.message || error.message,
            httpStatus: error.response.status,
            isHttpError: true
        });
    }
);

// // 刷新令牌逻辑
// function refreshTokenAndRetry(originalRequest) {
//   const refreshToken = localStorage.getItem('refresh_token');
  
//   if (!refreshToken) {
//     navigate('/login');
//     return Promise.reject();
//   }
  
//   return api.post('/api/auth/refresh', { refresh_token: refreshToken })
//     .then(res => {
//       const { access_token } = res.data.data;
//       localStorage.setItem('access_token', access_token);
      
//       // 重试原始请求
//       originalRequest.headers.Authorization = `Bearer ${access_token}`;
//       return api(originalRequest);
//     })
//     .catch(err => {
//       // 刷新失败，清理本地凭证，重定向到登录
//       localStorage.removeItem('access_token');
//       localStorage.removeItem('refresh_token');
//       router.push('/login');
//       return Promise.reject(err);
//     });
// }

export default http;